﻿Public Class Pedido : Implements IEquatable(Of Pedido)
    Private _FechaPedido As Date
    Public Property NombreCliente As String
    ''' <summary>
    ''' La Fecha de Pedido mayor que hoy
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property FechaPedido As Date
        Get
            Return _FechaPedido
        End Get
        Set(value As Date)
            If value >= Today Then
                _FechaPedido = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property ListaProductos As List(Of ProductoPedido)

    ''' <summary>
    ''' Calculamos el precio total de los Productos
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property PrecioTotal As Decimal
        Get
            Dim total As Decimal
            For Each prod As ProductoPedido In ListaProductos
                total = total + (prod.Cantidad * prod.Precio)
            Next
            Return total
        End Get
    End Property
    ''' <summary>
    ''' Constructor vacío. 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()

    End Sub
    ''' <summary>
    ''' Los Pedidos se crean con datos
    ''' </summary>
    ''' <param name="nomCli">Nombre del cliente que hace el pedido</param>
    ''' <param name="fechaPe">Fecha de realización del pedido</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal nomCli As String, ByVal fechaPe As Date)
        Me.NombreCliente = nomCli
        Me.FechaPedido = fechaPe
    End Sub
    ''' <summary>
    ''' La lista de Pedido se crea con datos
    ''' </summary>
    ''' <param name="nomCli">Nombre del cliente que hace el pedido</param>
    ''' <param name="fechaPe">Fecha de realización del pedido</param>
    ''' <param name="listProd">Lista de productos en el pedido</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal nomCli As String, ByVal fechaPe As Date, ByVal listProd As List(Of ProductoPedido))
        Me.NombreCliente = nomCli
        Me.FechaPedido = fechaPe
        Me.ListaProductos = listProd
    End Sub
    ''' <summary>
    ''' Define cuando se consideran iguales dos Pedidos, siendo del mismo tipo (Pedidos) les coincide el Nombre y la Fecha de Pedido
    ''' </summary>
    ''' <param name="other"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function Equals1(other As Pedido) As Boolean Implements System.IEquatable(Of Pedido).Equals
        Return other IsNot Nothing AndAlso Me.NombreCliente.ToLower = other.NombreCliente.ToLower AndAlso Me.FechaPedido = other.FechaPedido
    End Function
End Class
